import 'package:easy_refresh/easy_refresh.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:ball_lion/module/navigation/navigation_logic.dart';
import 'package:ball_lion/module/match/list/lq_match_filter_logic.dart';
import 'package:ball_lion/module/match/list/lq_view_logic.dart';
import 'package:ball_lion/module/match/list/match_page_logic.dart';
import 'package:ball_lion/resources/styles.dart';
import 'package:ball_lion/utils/constant.dart';
import 'package:ball_lion/utils/utils.dart';
import 'package:ball_lion/module/loading/loading_match_list.dart';
import 'package:ball_lion/module/match/basketball/lq_match_cell.dart';
import 'package:ball_lion/module/match/match_filter_float_widget.dart';
import 'package:ball_lion/widgets/loading/loading_widget.dart';
import 'package:ball_lion/widgets/loading/no_data_widget.dart';
import 'package:visibility_detector/visibility_detector.dart';

import 'package:ball_lion/utils/sp_utils.dart';
import 'package:ball_lion/widgets/ads_label.dart';
import 'package:ball_lion/widgets/header_delegate.dart';

class LqAllView extends StatefulWidget {
  const LqAllView({super.key});

  @override
  State<LqAllView> createState() => _LqAllViewState();
}

class _LqAllViewState extends State<LqAllView> {
  final logic = Get.put(
      LqViewLogic(LqMatchType.all, Constant.matchFilterTagAll),
      tag: Constant.matchFilterTagAll,
      permanent: true);

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    PrimaryScrollController.of(context).addListener(didScroll);
  }

  @override
  void deactivate() {
    PrimaryScrollController.of(context).removeListener(didScroll);
    super.deactivate();
  }

  @override
  Widget build(BuildContext context) {
    return GetBuilder<LqViewLogic>(
      tag: Constant.matchFilterTagAll,
      builder: (_) {
        return VisibilityDetector(
          key: const Key('all'),
          onVisibilityChanged: (VisibilityInfo info) {
            if (info.visibleBounds.isEmpty && logic.groupMatchList != null) {
              logic.getMatch();
            }
          },
          child: Stack(
            alignment: Alignment.center,
            children: [
              EasyRefresh.builder(
                  controller: logic.refreshC,
                  header:
                      Styles.refreshHeader(position: IndicatorPosition.locator),
                  onRefresh: () async {
                    Utils.onEvent('bspd_sx');
                    await logic.getMatch();
                  },
                  childBuilder: (BuildContext context, ScrollPhysics physics) =>
                      CustomScrollView(
                        physics: physics,
                        slivers: [
                          const HeaderLocator.sliver(),
                          if (SpUtils.matchLqAds?[0].hasValue == false ||
                              DateTime.now()
                                      .difference(DateTime.parse(
                                          SpUtils.matchLqAds![0]))
                                      .inHours >
                                  24)
                            SliverToBoxAdapter(
                              child: AdsLabel(
                                adsTag: "match_lq_全部",
                                close: 0,
                                tapType: 'match_advertising',
                                tagParam: "全部",
                                margin: const EdgeInsets.fromLTRB(8, 8, 8, 0),
                                onClose: () => setState(() {}),
                              ),
                            ),
                          LoadingWidget<int>(
                            data: logic.groupMatchList?.length ?? 0,
                            isLoading: logic.firstLoad,
                            loading: const LoadingMatchList.sliver(sportsId: 2),
                            noData: NoDataWidget.sliver(
                              tip: logic.quickFilter == QuickFilter.yiji
                                  ? '暂无一级比赛'
                                  : (logic.quickFilter == QuickFilter.jingcai
                                      ? '暂无竞篮比赛'
                                      : '暂无比赛'),
                            ),
                            child: () => const SliverToBoxAdapter(),
                          ),
                          if ((logic.groupMatchList?.length ?? 0) > 0)
                            ...List.generate(
                                logic.dayList?.length ?? 0,
                                (index) => SliverMainAxisGroup(slivers: [
                                      SliverPersistentHeader(
                                          pinned: true,
                                          delegate: HeaderDelegate(
                                              extent: 28,
                                              child:
                                                  Styles.matchListGroupHeader(
                                                      logic.dayList![index]))),
                                      SliverList(
                                          delegate: SliverChildBuilderDelegate(
                                              childCount: logic
                                                      .groupMatchList?[index]
                                                      .length ??
                                                  0,
                                              (context, i) => LqMatchCell(logic
                                                  .groupMatchList![index][i])))
                                    ])),
                          SliverToBoxAdapter(
                            child: Container(height: 80),
                          )
                        ],
                      )),
              Positioned(
                  bottom: 40,
                  child: MatchFilterFloatWidget(
                    1,
                    logic.firstLoad,
                    logic.quickFilter,
                    onTap: (index) {
                      logic.onSelectMatchType(index);
                    },
                  )),
              Styles.matchListBottomBar(
                  logic.hideMatchNum != 0 && !logic.isBottomHide,
                  logic.hideMatchNum, onClose: () {
                Utils.onEvent('bspd_sxfc_gb');
                logic.onCloseBottomBar();
              }, onDefault: () {
                Utils.onEvent('bspd_sxfc_hf');
                logic.onSelectDefaultMatch();
              })
            ],
          ),
        );
      },
    );
  }

  didScroll() {
    Get.find<NavigationLogic>().onMatchPageScroll();
  }
}
